import Vector from "../common/calc/vector"

class Target {
    constructor(x, y) {
        this.pos = new Vector(x, y);  // 目标的所处位置
        this.is_active = false;
        // 初始颜色
        this.origin_color = "#F6F152";
        // 目标是否被无人机摧毁
        this.is_dead = false;
        // 目标是否正在工作
        this.is_work = true;
    }

    // 目标的绘制方法
    draw(canvas) {
        let ctx = canvas.getContext("2d");
        ctx.save();
        ctx.translate(this.pos.x, this.pos.y);
        // 绘制五角星
        ctx.beginPath();
        //设置五个顶点的坐标，根据顶点制定路径
        for (var i = 0; i < 5; i++) {
            ctx.lineTo(Math.cos((18 + i * 72) / 180 * Math.PI) * 12, -Math.sin((18 + i * 72) / 180 * Math.PI) * 12);
            ctx.lineTo(Math.cos((54 + i * 72) / 180 * Math.PI) * 5, -Math.sin((54 + i * 72) / 180 * Math.PI) * 5);
        }
        ctx.closePath();
        ctx.lineWidth = "2.5";
        ctx.fillStyle = this.origin_color;
        // 开始工作后的假目标颜色
        if (this instanceof FakeTarget && this.is_work) ctx.fillStyle = "#F600DF";
        // 目标击毁后的颜色
        if (this.is_dead) ctx.fillStyle = "#000000";
        ctx.strokeStyle = "#F5270B";
        ctx.stroke();
        ctx.fill();
        if (this.is_find){
            ctx.beginPath();
            ctx.lineWidth = "2";
            ctx.strokeStyle = "#FFFFFF";
            ctx.arc(0,0,18,0,2*Math.PI);
            ctx.stroke();
            // ctx.closePath();
        }
        // 恢复canvas绘图状态
        ctx.restore();
    }

    // 转成String的方法
    toString() {
        return `${this.pos.x}&#${this.pos.y}&#`
    }

    // 激活目标
    active() {
        this.is_active = true;
    }
}

// 假目标继承目标的属性
class FakeTarget extends Target {
    constructor(x , y){
        // 调用父类的方法
        super(x, y);
        // 初始颜色
        this.origin_color = "#FFFFFF";
        // 假目标初始不工作
        this.is_work = false;
    }

    beginWork(){
        // 令目标开始工作
        this.is_work = true;
    }

    /**
     * 绘制目标,为三角形样式
     * @param canvas
     */
    draw(canvas) {
        let ctx = canvas.getContext("2d");
        ctx.save();
        ctx.translate(this.pos.x, this.pos.y);
        // 绘制五角星
        ctx.beginPath();
        ctx.beginPath();
        // 计算等边三角形的高
        let height = 16*Math.sin(Math.PI/3);
        ctx.moveTo(8,0);
        ctx.lineTo(0,height);
        ctx.lineTo(16,height);
        ctx.closePath();
        ctx.lineWidth = "2.5";
        ctx.fillStyle = this.origin_color;
        // 开始工作后的假目标颜色
        if (this.is_work) ctx.fillStyle = "#F600DF";
        // 目标击毁后的颜色
        if (this.is_dead) ctx.fillStyle = "#000000";
        ctx.strokeStyle = "#F5270B";
        ctx.stroke();
        ctx.fill();
        // 恢复canvas绘图状态
        ctx.restore();
    }

}

// 导出
export {Target, FakeTarget};